package br.com.acs.CameraIP.dao;

import br.com.acs.CameraIP.controller.LoginController;
import br.com.acs.CameraIP.model.PerfilUsuario;
import br.com.acs.CameraIP.model.Usuario;
import br.com.acs.CameraIP.util.HibernateUtil;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
 

public class PerfilUsuarioDaoImp implements PerfilUsuarioDao {
    LoginController login = new LoginController();
    private long idCliente = login.PegarClienteLogado();
    
    public void save(PerfilUsuario perfilUsuario) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction t = session.beginTransaction();
        perfilUsuario.setIdCliente(idCliente);
        session.merge(perfilUsuario);
        t.commit();
    }
    public PerfilUsuario getPerfilUsuario(long id) {
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         Transaction t = session.beginTransaction();
         t.commit();
        return (PerfilUsuario) session.load(PerfilUsuario.class, id);
    }
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public List<PerfilUsuario> listTodos() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from PerfilUsuario perfilUsuario where perfilUsuario.idCliente = :idCliente order by id").setParameter("idCliente",idCliente).list();
        t.commit();
        return lista;
    }
    
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public List<PerfilUsuario> listAtivos() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from PerfilUsuario perfilUsuario where ite.ativo = 'S' and perfilUsuario.idCliente :idCliente order by id").setParameter("idEmpresa",idCliente).list();
        t.commit();
        return lista;
    }
    
	@SuppressWarnings("unchecked")
	public List<PerfilUsuario> listPorUsuario(Usuario usuario) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction t = session.beginTransaction();
        List<PerfilUsuario> lista = session.createQuery("from PerfilUsuario perfilUsuario where perfilUsuario.usuarioId=:param and perfilUsuario.idCliente = :idCliente").setParameter("param",usuario.getId()).setParameter("idEmpresa",idCliente).list();
        t.commit();
        return lista;
    }
        
    public void remove(PerfilUsuario perfilUsuario) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction t = session.beginTransaction();
        session.delete(perfilUsuario);
        t.commit();
    }
    public void update(PerfilUsuario perfilUsuario) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction t = session.beginTransaction();
        perfilUsuario.setIdCliente(idCliente);
        session.merge(perfilUsuario);
        t.commit();
    }
}
